package com.zhu.instructions.loads;

import com.zhu.instructions.base.Index8Instruction;
import com.zhu.rtda.Frame;

/**
 * ILOAD 指令：加载 int 类型局部变量
 *
 * 作用：
 *   从当前帧的局部变量表中，读取指定索引位置的 int 值，
 *   并将其推入当前帧的操作数栈顶。
 *
 * 执行过程：
 *   1. 取出操作数：this.index（1 字节无符号整数）
 *   2. 从局部变量表获取：localVars[this.index] → int value
 *   3. 将该 int 值压入操作数栈
 *
 * 栈变化：
 *   操作前：[...]
 *   操作后：[..., value]
 */
public class ILOAD extends Index8Instruction {

    @Override
    public void execute(Frame frame) {
        // Step 1: 从局部变量表中读取 index 位置的 int 值
        int val = frame.getLocalVars().getInt(this.index);
        // Step 2: 将该 int 值推入操作数栈顶
        frame.getOperandStack().pushInt(val);
    }

    @Override
    public String toString() {
        return "iload " + this.index;
    }
}
